
package org.capgemini.tienda.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;
import org.capgemini.tienda.vo.ProductoVO;


public class MySqlProductosDAO implements IProductosDAO{
	
	private Connection connection;
	protected final static Logger logger = Logger.getLogger(MySqlProductosDAO.class);
	private ResourceBundle queries = ResourceBundle.getBundle("org.capgemini.tienda.dao.MySqlProductosDAO");
	
	public MySqlProductosDAO(Connection connection){
		this.connection=connection;
	}
	

	public void borrarProducto(String idProducto){
		logger.debug("@@@@@ LLAMADA A MySqlProductosDAO.borrarProducto() @@@@@");
		System.out.println("MI CONSULTA "+queries.getString("borrarProducto"));
		
		try {
			PreparedStatement ps = (PreparedStatement) connection.prepareStatement(queries.getString("borrarProducto"));
			ps.setString(1, idProducto);
			ps.executeUpdate();
			ps.close();
			
		} 
		catch (SQLException e) {
			logger.error("Error SQL en MySqlProductosDAO.borrarProducto: "+e.getMessage());
		}
		
	}
	
	
	
	public List<ProductoVO> getListaProductos(){
		logger.debug("@@@@@LLAMADA A MySqlProductosDAO.getListaProductos()@@@@@");
		List<ProductoVO> listaProductos = new ArrayList<ProductoVO>();
		try {
			PreparedStatement ps = (PreparedStatement) connection.prepareStatement(queries.getString("getListaProductos"));
			ResultSet rs = (ResultSet) ps.executeQuery();
			while(rs.next()){
				ProductoVO producto = new ProductoVO();
				producto.setIdProducto(rs.getString("id"));
				producto.setNombre(rs.getString("nombre"));
				producto.setDescripcion(rs.getString("descripcion"));
				producto.setImagenURL(rs.getString("smallImageURL"));
				producto.setPrecioBase(rs.getDouble("basePrice"));
				listaProductos.add(producto);
			}
			ps.close();
		} 
		catch (SQLException e) {
			logger.error("Error SQL en MySqlProductosDAO.getListaProductos: "+e.getMessage());
		}
		return listaProductos;
	}

	public ProductoVO getDetalleProducto(String idProducto){
		logger.debug("@@@@@LLAMADA A MySqlProductosDAO.getDetalleProductos()@@@@@");
		ResultSet rs=null;
		PreparedStatement ps=null;
		ProductoVO producto = null;
		final String query=queries.getString("getDetalleProducto");
		try {
			if(null == ps){ 
				ps= (PreparedStatement) connection.prepareStatement(query);
				ps.setString(1, idProducto);
				rs = (ResultSet) ps.executeQuery();
				while(rs.next()){
					producto=new ProductoVO();
					producto.setIdProducto(rs.getString(1));
					producto.setNombre(rs.getString(2));
					producto.setDescripcion(rs.getString(3));
					producto.setImagenURL(rs.getString(4));
					producto.setPrecioBase(rs.getDouble(5));
				}
			}
			ps.close();
		}catch (SQLException e) {
			logger.error("Error SQL en MySqlProductosDAO.getDetalleProducto: "+e.getMessage());
		}
		return producto;
	}
	
	public void addProducto(ProductoVO producto){
		logger.debug("@@@@@ LLAMADA A MySqlProductosDAO.addProducto() @@@@@");
		try {
			PreparedStatement ps = (PreparedStatement) connection.prepareStatement(queries.getString("addProducto"));
			ps.setString(1, producto.getNombre());
			ps.setString(2, producto.getDescripcion());
			ps.setString(3, producto.getImagenURL());
			ps.setString(4, new Double(producto.getPrecioBase()).toString());
			ps.executeUpdate();
			ps.close();
		}catch (SQLException e) {
			logger.error("Error SQL en MySqlProductosDAO.addProducto: "+e.getMessage());
		}
	}
	
		
	public void updateProducto(ProductoVO producto){
		logger.debug("@@@@@LLAMADA A MySqlProductosDAO.updateProducto()@@@@@");
		final String query =queries.getString("updateProducto");
		PreparedStatement ps=null;
		try {
			if(null == ps){
				ps=(PreparedStatement) connection.prepareStatement(query);
				ps.setString(1, producto.getNombre());
				ps.setString(2, producto.getDescripcion());
				ps.setString(3, producto.getImagenURL());
				ps.setDouble(4, producto.getPrecioBase());
				ps.setString(5, producto.getIdProducto());
				ps.executeUpdate();
			}
		}catch (SQLException e) {
			logger.error("Error SQL en MySqlProductosDAO.updateProducto: "+e.getMessage());
		}
	}
	
	public Connection getConnection(){
		return connection;
	}
	
}
